package cn.supermaster.management.common.utils;

import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.Map;

/**
 * All rights Reserved, Designed By www.super-bytecode.com
 *
 * @ProjectName: supermaster-management
 * @Package: cn.supermaster.management.common.utils
 * @ClassName: CheckUtils
 * @Description: [验证方法]
 * <p> </p>
 * @Author: [Lance Ting]
 * @Date: 2021/1/10 23:24
 * @Version: V1.0
 * @Copyright: 2021 www.super-bytecode.comn Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
public class CheckUtils {
    /**
     * * 判断一个Collection是否为空， 包含List，Set，Queue
     *
     * @param coll 要判断的Collection
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(Collection<?> coll) {
        return isNull(coll) || coll.isEmpty();
    }

    /**
     * * 判断一个Collection是否非空，包含List，Set，Queue
     *
     * @param coll 要判断的Collection
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Collection<?> coll) {
        return !isEmpty(coll);
    }

    /**
     * * 判断一个对象数组是否为空
     *
     * @param objects 要判断的对象数组
     *                * @return true：为空 false：非空
     */
    public static boolean isEmpty(Object[] objects) {
        return isNull(objects) || (objects.length == 0);
    }

    /**
     * * 判断一个对象数组是否非空
     *
     * @param objects 要判断的对象数组
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Object[] objects) {
        return !isEmpty(objects);
    }

    /**
     * * 判断一个Map是否为空
     *
     * @param map 要判断的Map
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return isNull(map) || map.isEmpty();
    }

    /**
     * * 判断一个Map是否为空
     *
     * @param map 要判断的Map
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return !isEmpty(map);
    }

    /**
     * * 判断一个字符串是否为空串
     *
     * @param str String
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(String str) {
        return isNull(str) || "".equals(str.trim());
    }

    /**
     * * 判断一个字符串是否为非空串
     *
     * @param str String
     * @return true：非空串 false：空串
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }

    /**
     * * 判断一个对象是否非空
     *
     * @param object Object
     * @return true：非空 false：空
     */
    public static boolean isNotNull(Object object) {
        return !isNull(object);
    }

    /**
     * * 判断一个对象是否是数组类型（Java基本型别的数组）
     *
     * @param object 对象
     * @return true：是数组 false：不是数组
     */
    public static boolean isArray(Object object) {
        return isNotNull(object) && object.getClass().isArray();
    }

    /**
     * @Description: [比较数字范围大小]
     * <p></P>
     * @Title: checkDigitalScope
     * @Author: Lance Ting
     * @Date: 2021-01-10
     * @Param: fromDigital 起始值
     * @Param: target 比较值
     * @Param: toDigital 终止值
     * @Return: boolean true-范围之内,false-不在范围之内
     * @Throws:
     */
    public static boolean checkDigitalScope(int fromDigital, int target, int toDigital) {
        // 比较值(target)<起始值(fromDigital) || 比较值(target)>终止值(toDigital)
        return fromDigital < target || toDigital < target;
    }

    /**
     * @Description: [判断参数列表任一个值是否为空]
     * <p></P>
     * @Title: checkParametricEmpty
     * @Author: Lance Ting
     * @Date: 2021-01-10
     * @Param: args 参数列表
     * @Return: boolean 参数列表任一一个值为空，直接返回true
     * @Throws:
     */
    public static boolean checkAnyParametricEmpty(Object... args) {
        boolean result = false;
        for (Object item : args) {
            // 参数列表任一一个值为空，直接返回true
            if (null == item) {
                result = true;
                break;
            }
        }
        return result;
    }

    /**
     * @Description: []
     * <p></P>
     * @Title: isNull
     * @Author: Lance Ting
     * @Date: 2021-01-03
     * @Param: arr
     * @Return: boolean
     */
    public static boolean isNull(byte[] arr) {
        if (null == arr || arr.length == 0) return true;
        return false;
    }

    /**
     * @description: [判断是否是Boolean类型数据]
     * <p></P>
     * @title: isBoolean
     * @author: Lance Ting
     * @date: 2021-01-13
     * @param: obj
     * @return: boolean
     */
    public static boolean isBoolean(@NotNull Object obj) {
        boolean isBoolean = true;
        if (obj instanceof Boolean) return isBoolean;
        if (obj instanceof String) {
            String text = obj.toString();
            isBoolean = "true".equals(text) || "false".equalsIgnoreCase(text);
        }
        return isBoolean;
    }
}